/**
 * @Title: MyMap.java
 * @Package com.eduspace.demo.util
 * @Description: TODO
 * @author tbc
 * @date 2016年2月25日 下午8:06:41
 * @version
 */
package com.eduspace.eduplatform.wares.utils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

/**
 *
 * @author tbc
 * @version 1.0 create:{2016年2月25日 下午8:06:41}
 *
 */
public class MyMap {
    private Map<String, BigDecimal> map = new HashMap<>();

    public void put(String k, BigDecimal v) {
        if (map.containsKey(k)) {
            BigDecimal temp = map.get(k);
            temp = temp.add(v);
            map.put(k, temp);
        } else {
            map.put(k, v);
        }
    }

    /**
     * 不排序
     *
     * @return
     * @author tbc tianbencai@e-eduspace.com
     * @version 1.0 {2016年3月4日 下午4:50:36}
     */
    public Map<String, BigDecimal> getMap() {
        return map;
    }

    /**
     * 默认降序排列
     *
     * @return
     * @author tbc tianbencai@e-eduspace.com
     * @version 1.0 {2016年3月4日 下午4:49:53}
     */
    public Map<String, BigDecimal> getOrderMap() {
        return sortMap(map, "desc");
    }

    public Map<String, BigDecimal> getOrderMap(String order) {
        return sortMap(map, order);
    }

    /**
     * 按值排序
     *
     * @param oldMap
     * @return
     * @author tbc tianbencai@e-eduspace.com
     * @version 1.0 {2016年3月4日 下午4:45:20}
     */
    public Map<String, BigDecimal> sortMap(Map<String, BigDecimal> oldMap, final String order) {
        ArrayList<Map.Entry<String, BigDecimal>> list = new ArrayList<>(oldMap.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<String, BigDecimal>>() {
            @Override
            public int compare(Entry<String, BigDecimal> arg0, Entry<String, BigDecimal> arg1) {
                if ("asc".toLowerCase().equals(order)) {
                    return arg0.getValue().compareTo(arg1.getValue());
                }
                // 默认，降序
                return arg1.getValue().compareTo(arg0.getValue());

            }
        });
        Map<String, BigDecimal> newMap = new LinkedHashMap<>();
        for (Entry<String, BigDecimal> aList : list) {
            newMap.put(aList.getKey(), aList.getValue());
        }
        return newMap;
    }

}